package cn.autumnorange.app.gateway.util;

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class IpUtil {

  public static String getIpAddrByNginx(HttpServletRequest request) throws UnknownHostException {

    // 从Nginx中X-Real-IP获取真实ip
    String ipAddress = request.getHeader("X-Real-IP");

    if (ipAddress != null && ipAddress.length() > 0 && !"unknown".equalsIgnoreCase(ipAddress)) {
      return ipAddress;
    }

    // 从Nginx中x-forwarded-for获取真实ip
    ipAddress = request.getHeader("x-forwarded-for");

    if (ipAddress != null && ipAddress.length() > 0 && !"unknown".equalsIgnoreCase(ipAddress)) {
      // 对于通过多个代理的情况，第一个IP为客户端真实IP,多个IP按照','分割
      int index = ipAddress.indexOf(",");
      if (index > 0) {
        ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
      }
      return ipAddress;
    }
    ipAddress = request.getRemoteAddr();
    if ("127.0.0.1".equals(ipAddress) || "0:0:0:0:0:0:0:1".equals(ipAddress)) {
      // 根据网卡取本机配置的IP
      ipAddress = InetAddress.getLocalHost().getHostAddress();
    }
    return ipAddress;
  }
}
